OpenCV4.0如何跑YOLOv3对象检测模型
OpenCV DNN对象检测概述
OpenCV4.0发布以来,其深度神经网络(Deep Neural Network-DNN)模块,功能变得十分的强大、本公众号坚持不断探索DNN模块中各种新模型支持与黑科技,先后发布了一系列关于OpenCV DNN使用的文章:
往期精选
OpenCV DNN支持图像分类、对象检测、图像分割常见通用网络模型,其中对象检测网络主要包括如下:
SSD
Faster-RCNN
RCNN
YOLO
这其中
DetectionOutput为SSD最后一层类型
im_info是Faster-RCNN/RCNN最后一层类型
Region是YOLO最后一层是类型
不同类型的输出层数据格式如下
输出层类型 | 数据格式 |
DetectionOutput | [batchId, classId, confidence, left, top, right, bottom] |
im_info | [batchId, classId, confidence, left, top, right, bottom] |
Region | [center_x, center_y, width, height, objectness, N-class score data] |
YOLOv3网络
YOLOv3网络在mAP与推断运行时间都达到了很高的性能,它与其它对象检测模型性能对象如下:
在COCO数据集上横向与各个对象检测模型对比如下:
从上面看出YOLOv3版本在运行实时性能与mAP方面完整的碾压SSD模型。YOLOv3能取得如此好的性能,跟它的网络结构对YOLO网络修改有很大关系,完整的YOLOv3版本的网络结构如下:
其中最重要的采用了多层金字塔特征网络(FPN),有效的提升检测的mAP,FPN的结构如下:
此外YOLOv3还采用了类似残差网络(Residual Blocks)的结构来进行特征提取学习
采用全卷积结构,有效减少了参数总数,取消了softmax层,最终输出结构如下:
DNN调用YOLOv3
加载YOLOv3网络预训练模型
# load tensorflow model
net = cv.dnn.readNetFromDarknet(config_text, model_bin)
image = cv.imread("D:/images/objects.jpg")
h = image.shape[0]
w = image.shape[1]
执行推断预测
# 基于多个Region层输出getUnconnectedOutLayersNames
blobImage = cv.dnn.blobFromImage(image, 1.0/255.0, (416, 416), None, True, False);
outNames = net.getUnconnectedOutLayersNames()
net.setInput(blobImage)
outs = net.forward(outNames)
解析输出结构
# 绘制检测矩形
classIds = []
confidences = []
boxes = []
for out in outs:
for detection in out:
scores = detection[5:]
classId = np.argmax(scores)
confidence = scores[classId]
# numbers are [center_x, center_y, width, height]
if confidence > 0.5:
center_x = int(detection[0] * w)
center_y = int(detection[1] * h)
width = int(detection[2] * w)
height = int(detection[3] * h)
left = int(center_x - width / 2)
top = int(center_y - height / 2)
classIds.append(classId)
confidences.append(float(confidence))
boxes.append([left, top, width, height])
YOLOv3, CPU运行对象检测结果:
发现执行推断需要300多毫秒,CPU实时检测已经彻底凉凉拉,别担心!这些早在YOLO的作者预料之中,所以他还提供了YOLOv3的微缩版本,简称为
YOLOv3-tiny
使用YOLOv3-tiny版本
YOLOv3无法在CPU上做到实时运行,于是我有尝试了YOLOv3-tiny版本,发现基于OpenCV DNN在CPU上可以跑到帧率高达30FPS左右,天又亮拉!有图为证:
欢迎扫码加入【OpenCV研习社】
退笔如山未足珍
读书万卷始通神
关注我们